MCP Issue Labeler GitHub Triage Bot - PART I#13552
Conversation
… non labelled issues
Removed unnecessary parameter 'mcpProcessor' from ProcessScheduledEvent call.
…-sdk-tools into mcp-gh-issue-labeler
There was a problem hiding this comment.
Pull request overview
This PR implements an AI-powered issue labeling system for the microsoft/mcp repository using Azure AI Search, Azure OpenAI, and RAG (Retrieval-Augmented Generation). The system automatically predicts Server and Tool labels for new issues based on similarity to historical labeled issues.
Changes:
- Adds
McpOpenAiLabelerwith RAG-based label prediction achieving ~90% accuracy - Implements MCP-specific infrastructure (
McpTriageRag) with query preprocessing and filtering - Creates evaluation tool (
Mcp.Evaluator) for testing labeler accuracy against ground truth - Updates GitHub event processor to route microsoft/mcp issues to new MCP-specific triage logic
Reviewed changes
Copilot reviewed 30 out of 30 changed files in this pull request and generated 29 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/issue-labeler/src/SearchIndexCreator/README.md | Comprehensive setup documentation for search infrastructure |
| tools/issue-labeler/src/SearchIndexCreator/Program.cs | Adds repository-specific routing and delete agent option |
| tools/issue-labeler/src/SearchIndexCreator/LabelRetrieval.cs | Implements MCP label extraction from GitHub |
| tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs | Adds MCP issue retrieval with Server/Tool label support |
| tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs | Configures MCP-optimized skillset and field mappings |
| tools/issue-labeler/src/SearchIndexCreator/IssueKnowledgeAgent.cs | Adds configurable reranker threshold and delete capability |
| tools/issue-labeler/src/SearchIndexCreator/DocumentTypes.cs | Adds Comment document type |
| tools/issue-labeler/src/Mcp.Evaluator/README.md | Documentation for evaluation tool usage |
| tools/issue-labeler/src/Mcp.Evaluator/McpLabelerTool.cs | Main evaluation program with prediction and extraction modes |
| tools/issue-labeler/src/Mcp.Evaluator/Mcp.Evaluator.csproj | Project configuration |
| tools/issue-labeler/src/Mcp.Evaluator/Evaluation/* | Test models and evaluator implementation |
| tools/issue-labeler/src/IssueLabelerService/TraigeRag.cs | Changes filter parameter from Dictionary to string |
| tools/issue-labeler/src/IssueLabelerService/Program.cs | Registers McpTriageRag and adds config override capability |
| tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs | MCP-specific RAG with query cleaning and labeled issue filtering |
| tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs | Main labeler with extensive classification prompt and validation |
| tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs | Adds McpOpenAI labeler factory case |
| tools/issue-labeler/src/IssueLabeler.Shared/IssueTriageContent.cs | Adds Server and Tool fields |
| tools/issue-labeler/IssueLabeler.sln | Adds Mcp.Evaluator project with platform configurations |
| tools/issue-labeler/Directory.Build.props | Updates Microsoft.Extensions versions |
| tools/github-event-processor/*/Program.cs | Adds DI container and McpIssueProcessing service |
| tools/github-event-processor/*/McpIssueProcessing.cs | MCP-specific triage logic with code owner assignment |
| tools/github-event-processor/*/IssueProcessing.cs | Routes MCP issues to dedicated processor |
| tools/github-event-processor/*/ConfigConstants.cs | Defines MCP label prefixes |
| tools/github-event-processor/*/Azure.Sdk.Tools.GitHubEventProcessor.csproj | Adds hosting dependencies |
| tools/github-event-processor/Tests/* | Test payloads and McpIssueProcessingTests |
...ntProcessor.Tests/Tests.JsonEventPayloads/McpIssueTriage_issue_opened_with_needs_triage.json
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/LabelerFactory.cs
Outdated
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Outdated
Show resolved
Hide resolved
...t-processor/Azure.Sdk.Tools.GitHubEventProcessor/Azure.Sdk.Tools.GitHubEventProcessor.csproj
Outdated
Show resolved
Hide resolved
tools/github-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/Constants/ConfigConstants.cs
Outdated
Show resolved
Hide resolved
| using System.Collections.Specialized; | ||
| using System.Diagnostics.Contracts; | ||
| using System.Linq; | ||
| using System.Reflection.Metadata; | ||
| using System.Security.Cryptography.X509Certificates; |
There was a problem hiding this comment.
This is a good suggestion; using "Remove and sort usings" would be a good idea here.
tools/github-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/Constants/ConfigConstants.cs
Outdated
Show resolved
Hide resolved
...thub-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/IssueProcessing.cs
Outdated
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/Mcp.Evaluator/Evaluation/McpTestModels.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpTriageRag.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/IssueLabelerService/Labelers/Mcp/McpOpenAiLabeler.cs
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentIndex.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
tools/issue-labeler/src/SearchIndexCreator/IssueTriageContentRetrieval.cs
Outdated
Show resolved
Hide resolved
...b-event-processor/Azure.Sdk.Tools.GitHubEventProcessor/EventProcessing/McpIssueProcessing.cs
Show resolved
Hide resolved
Major differences
Likelyhood of regression is minimal given dependency injection and changes. Workflow
Server labelsCrated as part of onboarding. Not referenced from CODEOWNERS. https://github.com/microsoft/mcp/issues/labels?q=server-
DeploymentHow is this deployed? How do we roll back/patch forward if there's a regression? |
danieljurek
left a comment
There was a problem hiding this comment.
LGTM. Let's get this deployed and iterating.
There's some stuff to document here but that knowledge should probably all go in a wiki.
…3634) Sync .github/workflows directory with azure-sdk-tools for PR Azure/azure-sdk-tools#13552 See [eng/common workflow](https://github.com/Azure/azure-sdk-tools/blob/main/eng/common/README.md#workflow) --------- Co-authored-by: anannya03 <aaniee09@gmail.com>
…37185) Sync .github/workflows directory with azure-sdk-tools for PR Azure/azure-sdk-tools#13552 See [eng/common workflow](https://github.com/Azure/azure-sdk-tools/blob/main/eng/common/README.md#workflow) --------- Co-authored-by: anannya03 <aaniee09@gmail.com>
| var csvOutput = args.FirstOrDefault(a => a.StartsWith("--output="))?.Split('=')[1] | ||
| ?? "mcp_evaluation_results.csv"; | ||
|
|
||
| var credential = new DefaultAzureCredential(); |
There was a problem hiding this comment.
Hey Anannya,
Could you please change this, it is causing S360 alertalerts for the CodeQL DefaultAzureCredential scan. I was told the due date is Feb 13th.

MCP Issue Labeler GitHub Triage Bot
This PR adds an issue labeling system for the
microsoft/mcprepository using Azure AI Search, Azure OpenAI, and RAG (Retrieval-Augmented Generation). It also updates the InitialIssueTriage rule for the microsoft/mcp repository to ensure consistent triage behavior across newly created issues.Changes
MCP Labeler (
McpOpenAiLabeler)ServerandToollabels for new MCP issuesexcludeIssueIdfilterMCP-Specific Infrastructure (
McpTriageRag)Server ne null)Evaluation Tool (
Mcp.Evaluator)TASK: microsoft/mcp#127